// 引入模块
/**
 * 这只是简单的分成了不同的文件；
 * 自我思考：
 * 缺陷：
 *      1、state的不同的变量不能同名
 *      2、同理action中的方法名也不能同名
 *      3、还需要在switch中判断后添加调用相应的方法
 * 改进思路：
 *      1、使用模块儿名来分开不同的变量
 *          例如： ...numObj.state,改为 numObj：{...numObj.state} 将不同的模块儿作为一个对象
 *      2、dispatch时的type为"模块名/方法名"，使用split("/")转数组判断长度；长度为1说明是全局的，单独处理
 *         长度为2说明是模块化的，调用对应模块中的action中的同名方法。
 *      2.1、思路核心伪代码：
 *          const allAction = {numObj:{...numObj.action}}
 *          let arr = action.type.split("/");
 *          if(arr.length === 2){allAction[arr[0]][arr[1]](defaultState[arr[1],action])}
 *          else{ switch (action.type) {case "addNum":numObj.action.addNum(newState);break;default:break;}}
 */
import numObj from "./module/num.js";
const defaultState = {
  //   num: 20,
  ...numObj.state,
};
let reducer = (state = defaultState, action) => {
  let newState = JSON.parse(JSON.stringify(state));
  //   console.log(action);
  switch (action.type) {
    case "addNum":
      //   newState.num++;
      numObj.action.addNum(newState);
      break;
    case "addNum1":
      //   newState.num += action.value;
      numObj.action.addNum1(newState, action);
      break;
    default:
      break;
  }
  return newState;
};
export default reducer;
